<?php

namespace WebExpres\ConfigBundle\Controller;

// Aquestes seran les classes que afegire per defecte
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
//use Symfony\Component\HttpFoundation\Response;

// Aqui posare funcions d'ajuda que tindra el Bundle
use WebExpres\ConfigBundle\ConfigBundle;
// Aqui vaig instacia de la classe que gestiona la BBDD
use WebExpres\ConfigBundle\Entity\Config;
use WebExpres\ConfigBundle\Entity\language;
use WebExpres\ConfigBundle\Entity\Dispolanguages;
use WebExpres\HotelBundle\Entity\HotelesIdioma;

class DefaultController extends Controller
{
 
    public function indexAction()
    {
        
        $Configuracio = $this->controlOpcio();
        //$HotelsPublicats = $this->consultaHotelsPublicats(0);
        $HotelsPublicats = $this->consultaGetHoteles(0);
        
        switch ($Configuracio) {
            Case 1:
            Case 2:
                
                // Config esta ple
                $configActiu = 0;

                // Faig consulta dels posibles idiomes de la web
                $Idiomes = $this->consultaLanguages(0);

                foreach ($Idiomes as $k => $Idioma) {

                    $idiActius[$k] = $Idioma->getCodigo();

                }

                // Faig consulta de idiomes tots idiomes disponibles de la web
                $repository = $this->getDoctrine()->getRepository('ConfigBundle:Dispolanguages');
                $Dispoidiomes = $repository->findAll();

                // Aqui comprovare si un idioma disponible esta activat
                foreach ($Dispoidiomes as $b => $Dispoidiome) {

                    if (!in_array($Dispoidiome->getCodigo(), $idiActius)) {

                        $passarDispo[$b]['codigo'] = $Dispoidiome->getCodigo();
                        $passarDispo[$b]['urlcodigo'] = $Dispoidiome->getUrlcodigo();

                    }

                }

                if (!isset($passarDispo)) {
                    $passarDispo = 0;
                }                
                
            break;
            Default;
                
                // Config esta buit
                $configActiu = 1;
                $Idiomes = 0;
                $passarDispo = 0;
                
            break;
        }
        
        return $this->render('ConfigBundle:Default:index.html.twig', array("configActiu" => $configActiu, "configuracio" => $Configuracio, "languages" => $Idiomes, "dispolanguages" => $passarDispo, "hotelspublicats" => $HotelsPublicats));
        
    }
    
    public function saveAction()
    {
        
        $request = $this->getRequest();
        
        $cadena = $request->request->get('cadena');
        
        switch ($cadena) {
            case 1:
            case 2: 
               
                if ($cadena == 1) {
                    // Hotel
                    $message = "Ha configurado la web como Hotel individual";
                } else {
                    // Cadena
                    $message = "Ha configurado la web como Cadena de Hoteles";
                }

                $insertConfig = New Config();
                $insertConfig->setValor($cadena);
                $accio = $insertConfig;

                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($accio);
                $em->flush();

                // Defineixo un idioma per defecte a la web.
                
                $this->insertLanguage("es_ES", "Español", "es");
               
                $this->get('session')->setFlash("info", $message);

                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
            default:
                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }

    }
    
    public function savelanguageAction() {
        
        $request = $this->getRequest();
        
        $idioma = $request->request->get('idioma'); 
        $codigo = $request->request->get('codigo'); 
        
        $repository = $this->getDoctrine()->getRepository('ConfigBundle:Dispolanguages');
        $Diponibles = $repository->findOneByCodigo($codigo);
        
        $urlcodigo = $Diponibles->getUrlcodigo();

        $repository = $this->getDoctrine()->getRepository('ConfigBundle:language');
        $resultat = $repository->findOneByCodigo($codigo);
        
        if ($idioma == "" || count($resultat) == 1 ) {
            
            $this->get('session')->setFlash("error", "Los campos con asterisco, son obligatorios");
        
            return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
            
        } else {
        
            // Defineixo un idioma per per la web
            $this->insertLanguage($codigo, $idioma, $urlcodigo);

            $this->get('session')->setFlash("success", "Idioma definido correctamente");
        
            return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
        
        }
        
    }
    
    /*************************************************************************************************/
    
    /*
     * function getHoteles
     */
    
    /*
     * Esta funcion sera para recoger los hoteles de la bbdd
     * Si el $valor = 0 devolvere todos los hoteles.
     * Si el $valor es diferente a 0 selecionare de la tabla hoteles el valor que le passe.
     */
    
    public function consultaGetHoteles($valor) {
        return $this->getHoteles($valor);
    }
    
    private function getHoteles($valor) {
        
        // Instancio el entity a la variable $repository
        $repository = $this->getDoctrine()->getRepository('HotelBundle:Hoteles');
        
        if ($valor == 0){ 
            
            // Aqui retorno tots els resultats de la bbdd
            $hoteles = $repository->findAll();
        
        } else {
            
            // Aqui retorno el resultat del hotel que estic buscant
            $hoteles = $repository->find($valor);
            
        }
        
        return $hoteles;
        
    }    
    
    public function controlOpcio() {
        
        // Faig consulta de la taula configuracio
        
        $em = $this->getDoctrine()->getEntityManager();
        $Resultats = $em->getRepository('ConfigBundle:Config')->findAll();
        
        $retornar = 0;
        
        foreach ($Resultats as $Resultat) {
            
            if ($Resultat->getValor() == 1 || $Resultat->getValor() == 2) {
                
                $retornar = $Resultat->getValor();
                
            }

        }
       
        return $retornar;
        
    }    
    
    public function consultaLanguages($ididioma) {
       
        return $this->consultaLanguagesWeb($ididioma);
        
    }
    
    private function consultaLanguagesWeb($ididioma) {
        
        $repository = $this->getDoctrine()->getRepository('ConfigBundle:language');
        if ($ididioma == 0) {
            $Idiomes = $repository->findAll();
        } else {
            $Idiomes = $repository->find($ididioma);
        }
        return $Idiomes;
        
    }
    
    public function consultaHotelsPublicats($valor) {
        
        $em = $this->getDoctrine()->getEntityManager();
        if ($valor == 0) {
            $QueryHotelPublicats = $em->getRepository('HotelBundle:Hoteles')->createQueryBuilder('h')->where('h.published = 1');
        } else {
            $QueryHotelPublicats = $em->getRepository('HotelBundle:Hoteles')->createQueryBuilder('h')->where('h.published = 1 and h.id = :idhotel')->setParameter('idhotel', $valor);
        }
        $Query = $QueryHotelPublicats->getQuery();
        $HotelPublicats = $Query->execute();
        
        return $HotelPublicats;
        
    }
    
    /*
     * function insertLanguage
     */
    
    /*
     * Aquesta funcio la fare servir per insertar els idiomes
     */
    
    private function insertLanguage($codigo, $idioma, $urlcodigo) {
        
        $insertIdioma = new language();
        $insertIdioma->setCodigo($codigo);
        $insertIdioma->setIdioma($idioma);
        $insertIdioma->setUrlcodigo($urlcodigo);
        $accion = $insertIdioma;
        
        $ec = $this->getDoctrine()->getEntityManager();
        $ec->persist($accion);
        $ec->flush();
        
        $hoteles = $this->hayHoteles();
        
        if (count($hoteles) != 0) {
            
            $idLanguage = $accion->getId();
            
            foreach ($hoteles as $hotel) {
                
                $insertIdiomaHotel = New HotelesIdioma();
                $insertIdiomaHotel->setIdhotel($hotel->getId());
                $insertIdiomaHotel->setIdidioma($idLanguage);
                $insertIdiomaHotel->setPublished(0);
                $insertIdiomaHotel->setLangdefault(0); 

                $accio = $insertIdiomaHotel; 
                            
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($accio);
                $em->flush();
                
            }
            
        }
        
    }
    
    /*
     * function hayHoteles
     */
    
    /*
     * Aqui mirare si hi ha hotels, per insertar el idioma al hotels creats
     */
    
    public function consultahayHoteles() {
       
        return $this->hayHoteles();
        
    }
    
    private function hayHoteles() {
    
        $repository = $this->getDoctrine()->getRepository('HotelBundle:Hoteles');
        $hoteles = $repository->findAll();
        
        return $hoteles;
        
    }
    
    /*
     * function CleanSession
     */
    
    /*
     * Funcio que faig servir per netejar la sessio
     */
        
    public function CleanSession() {
        
        $session = $this->getRequest()->getSession();
        
        $idhotelSessio = $session->get("idhotel");
        $idseccionSessio = $session->get("idseccion");
        $idarticleSessio = $session->get("idarticle");
        $idtradusSessio = $session->get("idtradus");
        $idmetasSessio = $session->get("idmetas");
        $idrelacioSessio = $session->get("idrelacio");
        $ididiomaSessio = $session->get("ididioma");
        
        if (isset($idhotelSessio)) {
            $session->clear("idhotel");
            unset($idhotelSessio);
        }
        
        if (isset($idseccionSessio)) {
            $session->clear("idseccion");
            unset($idseccionSessio);
        }
        
        if (isset($idtradusSessio)) {
            $session->clear("idtradus");
            unset($idtradusSessio);
        }
        
        if (isset($idarticleSessio)) {
            $session->clear("idarticle");
            unset($idarticleSessio);
        }
        
        if (isset($idmetasSessio)) {
            $session->clear("idmetas");
            unset($idmetasSessio);
        }
        
        if (isset($idrelacioSessio)) {
            $session->clear("idrelacio");
            unset($idrelacioSessio);
        }
        
        if (isset($ididiomaSessio)) {        
            $session->clear("ididioma");
            unset($ididiomaSessio);
        }        
        
    }
    
}
